package com.holystone.orca.sys.service;

import java.util.List;
import java.util.Map;

import com.holystone.orca.base.service.IBaseService;
import com.holystone.orca.common.PageData;
import com.holystone.orca.sys.model.SysDepAllDataVO;
import com.holystone.orca.sys.model.SysDepartmentVO;
import com.holystone.orca.sys.mybatis.model.SysDepartment;

public interface ISysDepartmentService extends IBaseService<SysDepartment> {

	
	/**
	 * @desc:根据部门id查询部门信息
	 * @author: guanzhichao
	 * @date:2015年11月24日 下午2:08:18
	 * @Param: depId 部门id
	 * @return: List<SysDepartment>
	 */
	List<SysDepartment> selectDepartById(int depId);

	/**
	 * @desc: 根据部门id， 实例id查询设备,多个id用","隔开
	 * @author: guanzhichao
	 * @date: 2015年11月24日 
	 * @Param: depIds 
	 * @Param: insIds
	 * @return:  List<SysDepartmentVO>
	 */
	public List<SysDepartmentVO> findBundEqemet(SysDepartmentVO deptVO);	
	/**
	 * @desc:通过部门id获取它本身和它所有的子孙对象 
	 * @author: 宋旭源
	 * @date: 2015年11月30日 下午7:59:37
	 * @param depId
	 * @param whereStr 条件字符串
	 * @return List<SysDepAllDataVO>
	 */
	public List<SysDepAllDataVO> selectDepChildrensById(Integer depId, String whereStr);

	/**
	 * 通过设备id列表获取它本身和它所有的子孙对象,并过滤重复值
	 * @desc: 
	 * @author: 宋旭源
	 * @date: 2015年12月1日 上午11:15:03
	 * @param depIds
	 * @param whereStr 条件字符串
	 * @return
	 */
	public List<SysDepAllDataVO> selectDepChildrensByIdList(List<Integer> depIds, String whereStr);
	/**
	 * 通过部门id获取它本身和它所有子孙的主键id
	 * @desc: 
	 * @author: 宋旭源
	 * @date: 2015年12月1日 下午2:46:26
	 * @param depId
	 * @param whereStr 条件字符串
	 * @return
	 */
	public List<Integer> selectDepChildrenIdsById(Integer depId, String whereStr);
	/**
	 * 通过设备id列表获取它本身和它所有子孙的主键Id,并过滤重复值
	 * @desc: 
	 * @author: 宋旭源
	 * @date: 2015年12月1日 下午2:47:05
	 * @param depIds
	 * @param whereStr
	 * @return
	 */
	public List<Integer> selectDepChildrenIdsByIdList(List<Integer> depIds, String whereStr);

	
	/**
	 * @desc: 用户id获取用户所在部门
	 * @author: guanzhichao
	 * @date:2015年12月3日 下午2:33:13
	 * @Param: userId 用户id
	 * @return: List<SysDepartment> 部门信息
	 */
	List<SysDepartment> selectDepartByUserId(String userId) throws Exception;
	
	//查询出deptname，用于person添加页面的部门选项
	public List<SysDepartment> selectDeptName() throws Exception;
	
	/**
	 * 查询所有父类部门信息
	 * @param map
	 * @return
	 * @throws Exception
	 */
	public List<SysDepartment> selectParentDep(Map<Object, String> map) throws Exception;
	
	
	/**
	 * 分页，初始化部门页面和根据部门名查询部门信息
	 * @param iPageNo
	 * @param iPageSize
	 * @param orderField
	 * @param depName
	 * @return
	 * @throws Exception
	 */
	public PageData pagingSysDep(int iPageNo, int iPageSize, String orderField, String depName) throws Exception;
	
	/**
	 * 添加部门信息
	 * @param map
	 * @return
	 * @throws Exception
	 */
	public boolean addDep(Map<Object, String> map) throws Exception;
	
	/**
	 * 根据父级部门的名字查找父级部门的Id
	 * @param parName
	 * @return
	 * @throws Exception
	 */
	public List<SysDepartment> selectIsHaveDep(Map<Object, String> map) throws Exception;
	
	/**
	 * 查询出部门信息，用于放到修改框里信息
	 * @param depId
	 * @return
	 * @throws Exception
	 */
	public SysDepartment selectDepBydepId(int depId) throws Exception;//用于放到修改框里的数据
	
	/**
	 * 修改部门信息
	 * @param map
	 * @return
	 * @throws Exception
	 */
	public boolean editDepBydepId(Map<String, String> map) throws Exception;
	
	/**
	 * 分页，初始化子部门信息和查询子部门
	 * @param iPageNo
	 * @param iPageSize
	 * @param orderField
	 * @param depName
	 * @param depId
	 * @return
	 * @throws Exception
	 */
	public PageData pagingSysChildDep(int iPageNo, int iPageSize, String orderField, String depName, String depId) throws Exception;
	
	/**
	 * 查询出除了 “自身”的所有“父级部门”信息
	 * @param depId
	 * @return
	 * @throws Exception
	 */
	public List<SysDepartment> selectDepNoSelfBydepId(Map<Object, String> map) throws Exception;
	
	/**
	 * 删除单个部门信息
	 * @param depId
	 * @return
	 * @throws Exception
	 */
	public boolean delDepByDepId(int depId) throws Exception;
	
	/**
	 * 多项删除，选中多个信息删除
	 * @param list
	 * @return
	 * @throws Exception
	 */
	public boolean delSelectDep(List<Integer> list) throws Exception;
	
}
